/*
Copyright (c) [2019年5月1日] [吴超]
[MBT_Studio] is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
		 http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.
*/
#pragma once


#include "Context/当前默认操作数据.h"
#include "节点/节点树.h"
#include <UI/UI.h>




void		f_node_环境初始化();
void		f_node_环境销毁();
void		f_node_set默认操作数据(S_Scene* scene, S_设备环境& 绘图环境);






C_节点树*	f_node_get节点树(uint16 id);
uint32		f_NT_get数量();


void f_node_节点树添加节点(C_节点树* tree, C_节点基类* node);
void f_node_节点树删除节点(C_节点树* tree, C_节点基类* node);
//void f_node_排序节点树(C_节点树* tree);
//void f_node_开始运行节点树();
void f_node_停止运行节点树();
void f_node_准备帧更新节点();
bool f_node_Step节点树();
//bool f_node_Step渲染节点树(int32 帧);


std::vector<C_节点基类*> f_node_深拷贝(C_节点基类** node, uint32 num, bool 节点树拷贝);

C_节点树* f_NT_拷贝(C_节点树* 节点树);

void f_node_添加暂停绘制部件(C_Widget* w);


void f_node_加载节点(S_设备环境& ctx, std::vector<C_节点基类*>& m_Nodes, FILE* f);
void f_node_保存节点(const std::set<C_节点基类*>& m_Nodes, FILE* f);


std::vector<C_节点树*> f_node_加载节点树(S_设备环境& ctx, FILE* f);
void                   f_node_保存节点树(std::vector<C_节点树*>& trees, FILE* f);


void f_node后端_销毁所有节点树();

void f_node后端_所有节点树设置为准备保存状态();
void f_node后端_设置节点树读取新建状态();
void f_node后端_读取所有节点(S_设备环境& ctx, FILE* f);
void f_node后端_写出所有节点(FILE* f);

void f_node后端_保存库节点(const std::set<C_节点基类*>& m_Nodes, FILE* f);
void f_node后端_加载库节点(S_设备环境& ctx, std::vector<C_节点基类*>& Nodes, FILE* f);
bool f_node后端_加载库节点信息(std::string info[2], FILE* f);
bool f_node后端_覆盖保存库节点(std::string path, const std::set<C_节点基类*>& m_Nodes);


void f_node_视口拾取空间射线坐标(const vec3& 开始, const vec3& 结束);
void f_NT_设置节点名称(C_节点基类* 节点, std::wstring name);




